<template lang="pug">
div(:class="$style.pagination" v-if="allPage > 1")
  ul
    li(v-if="page===1" :class="$style.disabled")
      span
        svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 451.846 451.847' space='preserve')
          use(xlink:href='#icon-left')
    li(v-else)
      button(type="button" @click="handleClick(page - 1)" :tips="$t('material.pagination.prev')")
        svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 451.846 451.847' space='preserve')
          use(xlink:href='#icon-left')
    li(v-if="allPage > btnLength && page > pageEvg+1" :class="$style.first")
      button(type="button" @click="handleClick(1)" :tips="$t('material.pagination.page', { num: 1 })")
        svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 451.846 451.847' space='preserve')
          use(xlink:href='#icon-first')

    li(v-for="(p, index) in pages" :key="index" :class="{[$style.active] : p == page}")
      span(v-if="p === page" v-text="page")
      button(v-else type="button" @click="handleClick(p)" v-text="p" :tips="$t('material.pagination.page', { num: p })")

    li(v-if="allPage > btnLength && allPage - page > pageEvg" :class="$style.last")
      button(type="button" @click="handleClick(allPage)" :tips="$t('material.pagination.page', { num: allPage })")
        svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 451.846 451.847' space='preserve')
          use(xlink:href='#icon-last')


    li(v-if="page===allPage" :class="$style.disabled")
      span
        svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 451.846 451.847' space='preserve')
          use(xlink:href='#icon-right')
    li(v-else)
      button(type="button" @click="handleClick(page + 1)" :tips="$t('material.pagination.next')")
        svg(version='1.1' xmlns='http://www.w3.org/2000/svg' xlink='http://www.w3.org/1999/xlink' height='100%' viewBox='0 0 451.846 451.847' space='preserve')
          use(xlink:href='#icon-right')

</template>

<script>
import { mapGetters } from 'vuex'

export default {
  props: {
    count: {
      type: Number,
      default: 0,
    },
    limit: {
      type: Number,
      default: 10,
    },
    page: {
      type: Number,
      default: 1,
    },
    btnLength: {
      type: Number,
      default: 7,
    },
    maxPage: {
      type: Number,
      default: null,
    },
  },
  data() {
    return {
      pageArr: [],
    }
  },
  computed: {
    ...mapGetters(['userInfo']),
    allPage() {
      return this.maxPage == null ? Math.ceil(this.count / this.limit) || 1 : this.maxPage
    },
    pageEvg() {
      return Math.floor(this.btnLength / 2)
    },
    pages() {
      if (this.allPage <= this.btnLength) return this.pageArr
      let start =
        this.page - this.pageEvg > 1
          ? this.allPage - this.page < this.pageEvg + 1
            ? this.allPage - (this.btnLength - 1)
            : this.page - this.pageEvg
          : 1
      let end =
        this.page + this.pageEvg <= this.btnLength
          ? this.btnLength
          : this.page + this.pageEvg <= this.allPage
            ? this.page + this.pageEvg
            : this.allPage
      // console.log(start-1);
      // console.log(end);
      // console.log(this.pageArr.slice(start-1, end-1));
      return this.pageArr.slice(start - 1, end)
    },
  },
  watch: {
    allPage() {
      this.initPageArr()
    },
  },
  methods: {
    initPageArr() {
      this.pageArr = []
      for (let i = 1; i <= this.allPage; i++) this.pageArr.push(i)
    },
    handleClick(page) {
      this.$emit('btn-click', page)
    },
  },
  mounted() {
    this.initPageArr()
  },
}
</script>


<style lang="less" module>
@import '../../assets/styles/layout.less';

.pagination {
  display: inline-block;
  background-color: @color-pagination-background;
  // border-top-left-radius: 8px;
  border-radius: @radius-border;
  ul {
    display: flex;
    flex-flow: row nowrap;
    // border: .0625rem solid @theme_color2;
    // border-radius: .3125rem;
    li {
      // margin-right: @padding;
      color: @color-theme;
      // border: .0625rem solid @theme_line;
      // border-radius: .3125rem;
      transition: 0.4s ease;
      transition-property: all;
      line-height: 1;
      display: flex;
      // border-right: none;
      svg {
        height: 1em;
      }
      span,
      button {
        display: block;
        padding: 7px 12px;
        line-height: 1;
        color: @color-theme;
        font-size: 13px;
      }
      &.active {
        span {
          background-color: @color-pagination-select;
        }
      }
      button {
        background-color: transparent;
        border: none;
        cursor: pointer;
        outline: none;
        transition: background-color .3s ease;
        &:hover {
          background-color: @color-pagination-hover;
        }
        &:active {
          background-color: @color-pagination-active;
        }
      }
      &.disabled {
        span {
          opacity: .3;
        }
      }
      &:first-child {
        span, button {
          border-top-left-radius: @radius-border;
          border-bottom-left-radius: @radius-border;
        }
        // border-right: .0625rem solid @theme_line;
      }
      &:last-child {
        span, button {
          border-top-right-radius: @radius-border;
          border-bottom-right-radius: @radius-border;
        }
        // border-right: .0625rem solid @theme_line;
      }
      &:first-child, &:last-child, &.first, &.last {
        span,
        button {
          line-height: 0;
        }
      }
    }
  }
}


each(@themes, {
  :global(#container.@{value}) {

    .pagination {
      background-color: ~'@{color-@{value}-pagination-background}';
      ul {
        li {
          color: ~'@{color-@{value}-theme}';
          span,
          button {
            color: ~'@{color-@{value}-theme}';
          }
          &.active {
            span {
              background-color: ~'@{color-@{value}-pagination-select}';
            }
          }
          button {
            &:hover {
              background-color: ~'@{color-@{value}-pagination-hover}';
            }
            &:active {
              background-color: ~'@{color-@{value}-pagination-active}';
            }
          }
        }
      }
    }
  }
})

</style>
